<?php

/*
 * Copyright (c) 2011 Joao Paulo Cirino Silva de Novais <joaopaulonovais@gmail.com>
 *
 */

class VagaControl extends Control {
    /*
     * Esse metodo responsavel por orquestrar as acoes das classes de visao
     * e dados.
     */

    static function executar() {

    	//Objetos que representam os dados (VO)
        $vaga        = new VagaModel();
        $vagaPerfil  = new VagaPerfilModel();
    	    	
    	//Recuperacao dos valores via $_REQUEST
        $acao = isset($_REQUEST["acao"]) ? $_REQUEST["acao"] : "";
        $tela = isset($_REQUEST["tela"]) ? $_REQUEST["tela"] : "";
        
        if ($_SESSION["cod_vaga"]){
            $cod_vaga = $_SESSION["cod_vaga"];
        } elseif ($_REQUEST["cod_vaga"]) {
            $cod_vaga = $_REQUEST["cod_vaga"]; 
        } else {
        	$cod_vaga = $vaga->get("cod_vaga");
        }

        //Objeto para manipular a interface
    	$visao  = new VagaView($tela);
    	//Consulta para preenchimento da tela
        $tipoPerfil       = TipoPerfilDAO::consultar(new TipoPerfilModel);
        $tipoProfissional = TipoProfissionalDAO::consultar(new TipoProfissionalModel);
    	//Envia os dados consultados para a interface
        $visao->setTipoProfissional($tipoProfissional);
        $visao->setTipoPerfil($tipoPerfil);
        //Para evitar manipulacoes erradas de vaga
        if ($_SESSION["cod_vaga"]){
            session_destroy();
        }
        
        self::load($vaga, $_REQUEST);

        switch ($acao) {

            case "Gravar": //Gravar (incluir ou alterar) uma vaga
            	
                if ($cod_vaga) {
                	VagaDAO::alterar($vaga);
                    $visao->setMensagem("Vaga alterada com sucesso!");
                } else {
             	
                	$id = VagaDAO::inserir($vaga);
                	if ($id){
                	    $vaga->set("cod_vaga", $id);
                	    //O codigo da vaga e enviado para sessão para facilitar a recuperacao nas consultas
                	    $_SESSION["cod_vaga"] =  $id;
                	    $visao->setMensagem("Vaga cadastrada com sucesso!");
                	} else {
                		$visao->setMensagem("Ops!Não foi possível cadastrar a vaga.");
                	}
                }
                $visao->editar(new VagaModel());

                break;
                            
            case "Consultar": //Consultar as vagas existentes

                $registros = VagaDAO::consultar($vaga);

                if ($registros) {
                    $visao->consultar($registros);
                } else {
                    $visao->consultar(new VagaModel());
                }

                break;
                
            case "Visualizar": //Visualizar como a vaga foi cadastrada
            	
                //Retorna um objeto
                //Dados da vaga
                $vaga   = VagaDAO::consultarVaga($vaga);
                //Perfis de uma vaga (1:n)
                $perfis = VagaDAO::consultarPerfil($vaga);
                    
                if ($vaga) {
                    $visao->visualizar($vaga, $perfis);
                } else {
                    $visao->visualizar(new VagaModel());
                }

                break;
                
            case "Aprovar": //Apresentar as vagas pendentes para aprovacao

                $registros = VagaDAO::consultarSituacao("P",$vaga->get("cod_tipo_profissional"), true);

                if ($registros) {
                    $visao->aprovar($registros);
                } else {
                    $visao->aprovar(new VagaModel());
                }
                	
                break;
                
            case "Confirmar": //Confirmar a aprovacao das vagas selecionadas

                if($_REQUEST["opt_vaga"]) {
                	foreach ($_REQUEST["opt_vaga"] as $cod_vaga) {
                         VagaDAO::incluirSituacao($cod_vaga, 'A'); //Vaga APROVADA
                	}
                    $visao->setMensagem("Vaga(s) aprovada(s) com sucesso!");
                } else {
                	$visao->setMensagem("Selecione ao menos uma vaga.");
                }

                $visao->aprovar(new VagaModel());

                break;  
                             
            default: // $acao == "Editar"
            	
            	if ($tela == "Cadastro") {

	                if ($vaga->get("cod_vaga")) {
                        //TODO: Trocar este método pelo consultarVaga()
	                	$registros = VagaDAO::consultar($vaga);
	                    	
                        if ($registros) {
                            $vaga = $registros[0];
	                    }
	                } else {
	                    $vaga = new VagaModel();
	                }
	                
	                $visao->editar($vaga);
            	} else {
            		$visao->consultar(null);
            	}
        }
    }
}

?>